home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 July / 07_02.iso / macos / files / Netscape-mac-full.bin / Netscape-mac-full / Netscape Full Installer / Installer Modules / mail.xpi / viewer / Components / nsLDAPPrefsService.js < prev    next >
Text File  |  2002-05-12  |  10KB  |  336 lines

  1. /* 
  2.  * The contents of this file are subject to the Mozilla Public
  3.  * License Version 1.1 (the "License"); you may not use this file
  4.  * except in compliance with the License. You may obtain a copy of
  5.  * the License at http://www.mozilla.org/MPL/
  6.  * 
  7.  * Software distributed under the License is distributed on an "AS
  8.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9.  * implied. See the License for the specific language governing
  10.  * rights and limitations under the License.
  11.  * 
  12.  * The Original Code is mozilla.org code.
  13.  * 
  14.  * The Initial Developer of the Original Code is Netscape
  15.  * Communications Corporation.  Portions created by Netscape are 
  16.  * Copyright (C) 2001 Netscape Communications Corporation.  All
  17.  * Rights Reserved.
  18.  * 
  19.  * Contributor(s): 
  20.  * Srilatha Moturi <srilatha@netscape.com>
  21.  */
  22.  
  23. /* components defined in this file */
  24.  
  25. const NS_LDAPPREFSSERVICE_CONTRACTID =
  26.     "@mozilla.org/ldapprefs-service;1";
  27. const NS_LDAPPREFSSERVICE_CID =
  28.     Components.ID("{5a4911e0-44cd-11d5-9074-0010a4b26cda}");
  29. const NS_LDAPPREFSSERVICE_IID = Components.interfaces.nsILDAPPrefsService;
  30.  
  31. /* interfaces used in this file */
  32. const nsISupports        = Components.interfaces.nsISupports;
  33. const nsIPrefBranch      = Components.interfaces.nsIPrefBranch;
  34. const nsILDAPURL         = Components.interfaces.nsILDAPURL;
  35. const nsILDAPService     = Components.interfaces.nsILDAPService;
  36.  
  37. const kDefaultLDAPPort = 389;
  38. const kDefaultSecureLDAPPort = 636;
  39.  
  40. /* nsLDAPPrefs service */
  41. function nsLDAPPrefsService() {
  42.   var arrayOfDirectories;
  43.   var j = 0;
  44.   try {
  45.     gPrefInt = Components.classes["@mozilla.org/preferences-service;1"];
  46.     gPrefInt = gPrefInt.getService(nsIPrefBranch);
  47.   }
  48.   catch (ex) {
  49.     dump("failed to get prefs service!\n");
  50.     return;
  51.   }
  52.   /* generate the list of directory servers from preferences */
  53.   var prefCount = {value:0};
  54.   try {
  55.     arrayOfDirectories = this.getServerList(gPrefInt, prefCount);
  56.   }
  57.   catch (ex) {
  58.     arrayOfDirectories = null;
  59.   }
  60.   if (arrayOfDirectories) {
  61.     this.availDirectories = new Array();
  62.     var position;
  63.     var description;
  64.     for (var i = 0; i < prefCount.value; i++)
  65.     {
  66.       if ((arrayOfDirectories[i] != "ldap_2.servers.pab") && 
  67.         (arrayOfDirectories[i] != "ldap_2.servers.history")) {
  68.         try{
  69.           position = gPrefInt.getIntPref(arrayOfDirectories[i]+".position");
  70.         }
  71.         catch(ex){
  72.           position = 1;
  73.         }
  74.         try{
  75.           dirType = gPrefInt.getIntPref(arrayOfDirectories[i]+".dirType");
  76.         }
  77.         catch(ex){
  78.           dirType = 1;
  79.         }
  80.         if ((position != 0) && (dirType == 1)) {
  81.           try{
  82.             description = gPrefInt.getComplexValue(arrayOfDirectories[i]+".description",
  83.                                                    Components.interfaces.nsISupportsWString).data;
  84.           }
  85.           catch(ex){
  86.             description = null;
  87.           }
  88.           if (description) {
  89.             this.availDirectories[j] = new Array(2);
  90.             this.availDirectories[j][0] = arrayOfDirectories[i];
  91.             this.availDirectories[j][1] = description;
  92.             j++;
  93.           }
  94.         }
  95.       }
  96.     }
  97.   }
  98.   this.migrate();
  99. }
  100. nsLDAPPrefsService.prototype.prefs_migrated = false;
  101. nsLDAPPrefsService.prototype.availDirectories = null;
  102.  
  103. nsLDAPPrefsService.prototype.QueryInterface =
  104. function (iid) {
  105.  
  106.     if (!iid.equals(nsISupports) &&
  107.         !iid.equals(NS_LDAPPREFSSERVICE_IID))
  108.         throw Components.results.NS_ERROR_NO_INTERFACE;
  109.  
  110.     return this;
  111. }
  112.  
  113. const prefRoot = "ldap_2.servers";
  114. const parent = "ldap_2.servers.";
  115.  
  116. nsLDAPPrefsService.prototype.getServerList = 
  117. function (prefBranch, aCount) {
  118.   var prefCount = {value:0};
  119.   
  120.   // get all the preferences with prefix ldap_2.servers
  121.   var directoriesList = prefBranch.getChildList(prefRoot, prefCount);
  122.   
  123.   var childList = new Array();
  124.   var count = 0;
  125.   if (directoriesList) {
  126.     directoriesList.sort();
  127.     var prefixLen;
  128.     // lastDirectory contains the last entry that is added to the 
  129.     // array childList.
  130.     var lastDirectory = "";
  131.  
  132.     // only add toplevel prefnames to the list,
  133.     // i.e. add ldap_2.servers.<server-name> 
  134.     // but not ldap_2.servers.<server-name>.foo
  135.     for(i=0; i<prefCount.value; i++) {
  136.       // Assign the prefix ldap_2.servers.<server-name> to directoriesList
  137.       prefixLen = directoriesList[i].indexOf(".", parent.length);
  138.       if (prefixLen != -1) {
  139.         directoriesList[i] = directoriesList[i].substr(0, prefixLen);
  140.         if (directoriesList[i] != lastDirectory) {
  141.           // add the entry to childList 
  142.           // only if it is not added yet
  143.           lastDirectory = directoriesList[i];
  144.           childList[count] = directoriesList[i];
  145.           count++;
  146.         }
  147.       }
  148.     }
  149.   }
  150.  
  151.   if (!count)
  152.   // no preferences with the prefix ldap_2.servers
  153.     throw Components.results.NS_ERROR_FAILURE;
  154.  
  155.   aCount.value = count;
  156.   return childList;
  157. }
  158.  
  159. /* migrate 4.x ldap prefs to mozilla format. 
  160.    Converts hostname, basedn, port to uri (nsLDAPURL).    
  161.  */
  162. nsLDAPPrefsService.prototype.migrate = 
  163. function () {
  164.   var pref_string;
  165.   var ldapUrl=null;
  166.   var enable = false;
  167.   if (this.prefs_migrated) return;
  168.   var gPrefInt = null;
  169.   var host;
  170.   var dn;
  171.   try {
  172.     gPrefInt = Components.classes["@mozilla.org/preferences-service;1"];
  173.     gPrefInt = gPrefInt.getService(Components.interfaces.nsIPrefBranch);
  174.   }
  175.   catch (ex) {
  176.     dump("failed to get prefs service!\n");
  177.     return;
  178.   }
  179.   var migrated = false;
  180.   try{
  181.     migrated = gPrefInt.getBoolPref("ldap_2.prefs_migrated");
  182.   }
  183.   catch(ex){}
  184.   if (migrated){
  185.     this.prefs_migrated = true;
  186.     return;
  187.   }
  188.   try{
  189.     var useDirectory = gPrefInt.getBoolPref("ldap_2.servers.useDirectory");
  190.   }
  191.   catch(ex) {}
  192.   try {
  193.     var ldapService = Components.classes[
  194.         "@mozilla.org/network/ldap-service;1"].
  195.         getService(Components.interfaces.nsILDAPService);
  196.   }
  197.   catch (ex)
  198.   { 
  199.     dump("failed to get ldap service!\n");
  200.     ldapService = null;
  201.   }
  202.   for (var i=0; i < this.availDirectories.length; i++) {
  203.     pref_string = this.availDirectories[i][0];
  204.     try{
  205.       host = gPrefInt.getCharPref(pref_string + ".serverName");
  206.     }
  207.     catch (ex) {
  208.       host = null;
  209.     }
  210.     if (host) {
  211.       try {
  212.         ldapUrl = Components.classes["@mozilla.org/network/ldap-url;1"];
  213.         ldapUrl = ldapUrl.createInstance().QueryInterface(nsILDAPURL);
  214.       }
  215.       catch (ex) {
  216.         dump("failed to get ldap url!\n");
  217.         return;
  218.       }
  219.       ldapUrl.host = host;
  220.       try{
  221.         dn = gPrefInt.getComplexValue(pref_string + ".searchBase",
  222.                                       Components.interfaces.nsISupportsWString).data;
  223.       }
  224.       catch (ex) {
  225.         dn = null;
  226.       }
  227.       if (dn && ldapService)
  228.         ldapUrl.dn = ldapService.UCS2toUTF8(dn);
  229.       var secure = false;
  230.       try {
  231.         secure = gPrefInt.getBoolPref(pref_string + ".isSecure");
  232.       }
  233.       catch(ex) {// if this preference does not exist its ok
  234.       }
  235.       var port;
  236.       if (secure) {
  237.         ldapUrl.options |= ldapurl.OPT_SECURE;
  238.         port = kDefaultSecureLDAPPort;
  239.       }
  240.       else
  241.         port = kDefaultLDAPPort;
  242.       try {
  243.         port = gPrefInt.getIntPref(pref_string + ".port");
  244.       }
  245.       catch(ex) {
  246.         // if this preference does not exist we will use default values.
  247.       }
  248.       ldapUrl.port = port;
  249.       ldapUrl.scope = 2;
  250.  
  251.       var uri = Components.classes["@mozilla.org/supports-wstring;1"]
  252.                       .createInstance(Components.interfaces.nsISupportsWString);
  253.       uri.data = ldapUrl.spec;
  254.       gPrefInt.setComplexValue(pref_string + ".uri", Components.interfaces.nsISupportsWString, uri);
  255.  
  256.       /* is this server selected for autocompletion? 
  257.          if yes, convert the preference to mozilla format.
  258.          Atmost one server is selected for autocompletion. 
  259.        */
  260.       if (useDirectory && !enable){
  261.         try {
  262.          enable = gPrefInt.getBoolPref(pref_string + ".autocomplete.enabled");
  263.         } 
  264.         catch(ex) {}
  265.         if (enable) {
  266.           gPrefInt.setCharPref("ldap_2.servers.directoryServer", pref_string);
  267.         }
  268.       }
  269.     }
  270.   }
  271.   try {
  272.     gPrefInt.setBoolPref("ldap_2.prefs_migrated", true);
  273.     var svc = Components.classes["@mozilla.org/preferences-service;1"]
  274.                         .getService(Components.interfaces.nsIPrefService);
  275.     svc.savePrefFile(null);
  276.   }
  277.   catch (ex) {dump ("ERROR:" + ex + "\n");}
  278.     
  279.   this.prefs_migrated = true;
  280. }
  281.  
  282. /* factory for nsLDAPPrefs service (nsLDAPPrefsService) */
  283.  
  284. var nsLDAPPrefsFactory = new Object();
  285.  
  286. nsLDAPPrefsFactory.createInstance =
  287.  
  288. function (outer, iid) {
  289.     if (outer != null)
  290.         throw Components.results.NS_ERROR_NO_AGGREGATION;
  291.  
  292.     if (!iid.equals(nsISupports))
  293.         throw Components.results.NS_ERROR_INVALID_ARG;
  294.  
  295.     return new nsLDAPPrefsService();
  296. }
  297.  
  298. var nsLDAPPrefsModule = new Object();
  299. nsLDAPPrefsModule.registerSelf =
  300. function (compMgr, fileSpec, location, type)
  301. {
  302.     compMgr = compMgr.QueryInterface(Components.interfaces.nsIComponentRegistrar);
  303.  
  304.     compMgr.registerFactoryLocation(NS_LDAPPREFSSERVICE_CID,
  305.                                     "nsLDAPPrefs Service",
  306.                                     NS_LDAPPREFSSERVICE_CONTRACTID, 
  307.                                     fileSpec,
  308.                                     location,
  309.                                     type);
  310. }
  311.  
  312. nsLDAPPrefsModule.unregisterSelf =
  313. function(compMgr, fileSpec, location)
  314. {
  315.     compMgr = compMgr.QueryInterface(Components.interfaces.nsIComponentRegistrar);
  316.     compMgr.unregisterFactoryLocation(NS_LDAPPREFSSERVICE_CID, fileSpec);
  317. }
  318.  
  319. nsLDAPPrefsModule.getClassObject =
  320. function (compMgr, cid, iid) {
  321.     if (cid.equals(NS_LDAPPREFSSERVICE_CID))
  322.         return nsLDAPPrefsFactory;
  323.     throw Components.results.NS_ERROR_NO_INTERFACE;  
  324. }
  325.  
  326. nsLDAPPrefsModule.canUnload =
  327. function(compMgr)
  328. {
  329.     return true;
  330. }
  331.  
  332. /* entrypoint */
  333. function NSGetModule(compMgr, fileSpec) {
  334.     return nsLDAPPrefsModule;
  335. }
  336.